//这是第二周的作业测试
// package main

// import "fmt"

// func main() {
// 	fmt.Println("hello word")
// }

/*
第一题： 九九乘法表，规定格式输出
*/

package main

import (
	"fmt"
	"math/rand"
	"time"
)

func Multiplication() {
	var wide int
	for i := 1; i <= 9; i++ {
		for j := 1; j <= i; j++ {
			//如果j=1，wide=2，间隔两个空格
			if j == 1 {
				wide = 2
			} else {
				//间隔三个个空格  - 左对齐
				wide = 3
			}
			fmt.Printf("%v*%v=%-[3]*v", j, i, wide, i*j)
		}
		fmt.Println()

	}
}

func distinguish() {
	fmt.Println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
}

func jj2() {

	for a := 1; a < 10; a++ {
		for b := 1; b < a; b++ {
			// 如果b=1,左对齐 两个空格
			if b == 1 {
				fmt.Printf("%d*%d=%-2v", b, a, a*b)
			} else {
				// 其他,左对齐 三个空格
				fmt.Printf("%d*%d=%-3v", b, a, a*b)
			}
		}
		fmt.Println()
	}
}

/*
第二题：斐裂契约数；随机生成20个非0的整数，打印出来，对生成的数值，第单数个（不是索引），累加
       求和，第偶数个累乘求积；打印结果
*/
func fib() {
	//rand.Seed(time.Now().UnixNano()) // 设置随机种子
	rand.New(rand.NewSource(time.Now().UnixNano()))
	var randomNumbers []int
	for i := 0; i < 20; i++ {
		num := generateNonZeroRandomNumber()
		randomNumbers = append(randomNumbers, num)
	}

	fmt.Println("随机生成的整数:", randomNumbers)

	sumOdd := 0
	productEven := 1

	for i, num := range randomNumbers {
		if i%2 == 0 { // 第单数个，索引从0开始
			sumOdd += num
		} else { // 第偶数个
			productEven *= num
		}
	}

	fmt.Printf("第单数个累加求和结果: %d\n", sumOdd)
	fmt.Printf("第偶数个累乘求积结果: %d\n", productEven)
}

func generateNonZeroRandomNumber() int {
	num := 0
	for num == 0 {
		num = rand.Intn(100) + 1 // 生成1到100的随机整数
	}
	return num
}

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// func fib2() {
// 	//设置随机数的种子  伪随机
// 	src := rand.NewSource(1) //seed=1，f(x) f(seed) f(1)
// 	r := rand.New(src)
// 	for i := 0; i < 5; i++ {
// 		fmt.Println(i, r.Intn(8)) //i 是索引

// 	}
// }

// //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// func fib3() {
// 	r5 := rand.New(rand.NewSource(time.Now().UnixNano())) //设置随机数的种子，以时间毫秒为计算单位
// 	for w := 0; w < 5; w++ {
// 		fmt.Println(w, r5.Intn(8)) //w是索引  从0 开始，循环五次
// 	}
// }

/*
第三题： 打印100以内的斐波那契约数
*/

func fiboSlice() {
	fiboSlice := []int{1, 1} //初始化斐波那契约数前两个为1,1
	a, b := 1, 1
	for c := 0; true; {
		c = a + b
		if c > 100 {
			break
		}
		fiboSlice = append(fiboSlice, c)
		a = b
		b = c
	}
	fmt.Println(fiboSlice)

}

func main() {
	Multiplication()
	distinguish()
	jj2()
	distinguish()
	fib()
	// distinguish()
	// fib2()
	distinguish()
	// fib3()
	fiboSlice()
}

// 阿飞老师的批改
// 1. 第二题是生成20个20以内的随机数，奇数个相加求和，偶数个相乘求积
